﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Etna.Exportaciones.Rn;
using Etna.Exportaciones.En;

namespace WebExportaciones
{
    public partial class frmLista_Requerimiento : System.Web.UI.Page
    {
        protected List<EnRequerimiento> loEnRequerimiento;
        private EnCliente loEnCliente;
        protected List<EnEstadoRequerimiento> loEnEstadoRequerimiento;
        private int iPaginaActual;
        private int iTotalPaginas; 
        private int iPaginaInicial;
        private bool bDirectoPagina;
         
        protected void Page_Load(object sender, EventArgs e)
        {            
            if (!Page.IsPostBack) 
            {
                RnRequerimiento oRnRequerimiento = new RnRequerimiento();
                configurarCliente();
                loEnRequerimiento = oRnRequerimiento.Listar(loEnCliente.idCliente);
                hdfPaginaActual.Value = "0";
                Session["ContenidoGrilla"] = loEnRequerimiento;
                Session["Usuario"] = loEnCliente;
                EnlazarGridView();     
                CargarEstadoRequerimiento();
            }
            else
            {

                loEnRequerimiento = (List<EnRequerimiento>)Session["ContenidoGrilla"];
            }
             
        }

        protected void configurarCliente()
        {
            // Deberia obtener por session despues que este cliente se logea.
            this.loEnCliente = new RnCliente().Leer(2);
        }

        protected void EventoTecladoTxtPagina(object sender, EventArgs e)
        {
            bDirectoPagina = true;
            TextBox oTextBox = (TextBox)sender;
            PaginarPorNumero(oTextBox);
        }

        protected void EventoTecladoTxtBuscar(object sender, EventArgs e)
        {
            
        }

        protected void AccionBuscar(object sender, EventArgs e)
        {
            if (bDirectoPagina == false)
            {
                Buscar();                
            }
            else
            {
                bDirectoPagina = false;
            }
        }
        protected void AccionNuevo(object sender, EventArgs e)
        {
            InsertarDatos();
        }

        protected void Ordenar(object sender, GridViewSortEventArgs e)
        {

        }

        protected void Paginar(object sender, EventArgs e)
        {
            Button btnLlamada = (Button)sender;
            PaginarPorBoton(btnLlamada);
        }

        protected void AccionEliminar(object sender, EventArgs e)
        {
            lblMensajeError.Text = "El registro se encuentra en estado pendiente no puede eliminarse";
        }

        void PaginarPorNumero(TextBox poTextBox)
        {
            int iNuevoNumeroPagina;
            int iTotalPaginas;
            lblMensajeError.Text = "";

            int.TryParse(lblTotalPaginas.Text, out iTotalPaginas);


            if (poTextBox.Text.Trim().Length > 0)
            {
                if (int.TryParse(poTextBox.Text.Trim(), out iNuevoNumeroPagina))
                {
                    if ((iNuevoNumeroPagina > 0) && (iNuevoNumeroPagina <= iTotalPaginas))
                    {
                        gvRequerimiento.PageIndex = iNuevoNumeroPagina - 1;
                        hdfPaginaActual.Value = (iNuevoNumeroPagina - 1).ToString();
                    }
                    else
                    {
                        lblMensajeError.Text = "El valor ingresado está fuera del rango de páginas permitido. Por favor revisar.";
                        poTextBox.Focus();
                    }
                }
                else
                {
                    lblMensajeError.Text = "El valor ingresado debe ser numérico. Por favor revisar.";
                    poTextBox.Focus();
                }
            }
            EnlazarGridView();
        }

        void PaginarPorBoton(Button pbtnLlamada)
        {
            loEnRequerimiento = (List<EnRequerimiento>)Session["ContenidoGrilla"];
            string sParametro;
            int iPaginaNueva = 0;

            sParametro = pbtnLlamada.CommandArgument;
            switch (sParametro)
            {
                case "-2":
                    // opción Primero
                    iPaginaNueva = 0;
                    break;
                case "-1":
                    // opción Anterior
                    iPaginaNueva = int.Parse(hdfPaginaActual.Value) - 1;
                    if (iPaginaNueva < 0)
                    {
                        iPaginaNueva = 0;
                    }
                    break;
                case "+1":
                    // opción siguiente
                    iPaginaNueva = int.Parse(hdfPaginaActual.Value) + 1;
                    if (iPaginaNueva >= int.Parse(lblTotalPaginas.Text))
                    {
                        iPaginaNueva = int.Parse(lblTotalPaginas.Text) - 1;
                    }
                    break;
                case "+2":
                    // opción último
                    iPaginaNueva = int.Parse(lblTotalPaginas.Text) - 1;
                    break;
                default:
                    if (!int.TryParse(sParametro, out iPaginaNueva))
                    {
                        iPaginaNueva = int.Parse(hdfPaginaActual.Value);
                    }
                    break;
            }

            if (iPaginaNueva >= 0)
            {
                gvRequerimiento.PageIndex = iPaginaNueva;
                hdfPaginaActual.Value = iPaginaNueva.ToString();
            }
            hdfPaginaActual.Value = iPaginaNueva.ToString();
            EnlazarGridView();
        }

        void Buscar()
        {
            int valor;
            lblMensajeError.Text = "";

            loEnCliente = (EnCliente)Session["Usuario"];

            if (loEnCliente == null)
            {
                this.loEnCliente = new RnCliente().Leer(2);
            }

            if (loEnCliente == null)
            {
                this.loEnCliente = new RnCliente().Leer(2);
            }

            int pidCliente = loEnCliente.idCliente;
            int pidRequerimiento = 0;
            string psDescripcion = null;
            String pdfechaInicio = "";
            String pdfechaFin = "";
            int pidEstadoReq = 0;

            if (int.TryParse(txtNumRequerimiento.Text, out valor)){
                if (int.Parse(txtNumRequerimiento.Text) == 0){
                    lblMensajeError.Text = "El valor ingresado debe ser numérico y mayor a 0. Por favor revisar.";
                    txtNumRequerimiento.Focus();
                    return;
                }else{
                    pidRequerimiento = int.Parse(txtNumRequerimiento.Text);
                }                                
            }

            if (!string.IsNullOrEmpty(txtDescripcion.Text)){
                psDescripcion = txtDescripcion.Text;
            }

            if (!string.IsNullOrEmpty(txtFechaInicio.Text))
            {
                pdfechaInicio = txtFechaInicio.Text;
            }

            if (!string.IsNullOrEmpty(txtFechaFin.Text))
            {
                pdfechaFin = txtFechaFin.Text;
            }

            if (int.Parse(ddlEstadoRequerimiento.SelectedValue) > 0)
            {
                pidEstadoReq = int.Parse( ddlEstadoRequerimiento.DataValueField );
            }

            CargarGrillaDesdeBD(pidCliente,pidRequerimiento,psDescripcion, pdfechaInicio,pdfechaFin,pidEstadoReq);
            
        }

        void CargarGrillaDesdeBD(int pidCliente = 0,
                                        int pidRequerimiento = 0,
                                          string psDescripcion = null,
                                          String pdfechaInicio = "",
                                          String pdfechaFin = "",
                                          int pidEstadoReq = 0)
        {
            RnRequerimiento oRnRequerimiento = new RnRequerimiento();
            loEnRequerimiento = oRnRequerimiento.Listar(pidCliente, pidRequerimiento, psDescripcion, pdfechaInicio, pdfechaFin, pidEstadoReq);
            hdfPaginaActual.Value = "0";
            Session["ContenidoGrilla"] = loEnRequerimiento;
            gvRequerimiento.PageIndex = 0;
            EnlazarGridView();
        }

        void CargarEstadoRequerimiento()
        {
            RnEstadoRequermiento oRnEstadoReq = new RnEstadoRequermiento();
            if (Session["ContenidoEstadoRequerimiento"] == null)
            {
                loEnEstadoRequerimiento = oRnEstadoReq.Listar();
                Session["ContenidoEstadoRequerimiento"] = loEnEstadoRequerimiento;
            }
            else
            {
                loEnEstadoRequerimiento = (List<EnEstadoRequerimiento>)Session["ContenidoEstadoRequerimiento"];
            }
            ListItem oList = new ListItem("--Seleccione--","0");


            ddlEstadoRequerimiento.DataSource = loEnEstadoRequerimiento;
            ddlEstadoRequerimiento.DataBind();
            ddlEstadoRequerimiento.Items.Insert(0, oList);
        }

        private void EnlazarGridView()
        {
            int iPosicion;

            if (loEnRequerimiento != null)
            {
                gvRequerimiento.DataSource = loEnRequerimiento;
                gvRequerimiento.DataBind();

                iPaginaActual = int.Parse(hdfPaginaActual.Value);
                iTotalPaginas = gvRequerimiento.PageCount;
                iPaginaInicial = (int)Math.Floor((double)(iPaginaActual / 5)) * 5;
                iPosicion = iPaginaActual - iPaginaInicial;
                lblTotalRegistros.Text = loEnRequerimiento.Count.ToString();
            }
            else
            {
                iPaginaActual = 0;
                iTotalPaginas = 0;
                iPaginaInicial = 0;
                iPosicion = 0;
                lblTotalRegistros.Text = "0";
            }

            lblTotalPaginas.Text = iTotalPaginas.ToString();

            // Boton 1
            if (iPaginaInicial + 1 > iTotalPaginas)
            {
                btnPagina1.Visible = false;
            }
            else
            {
                btnPagina1.Visible = true;
                btnPagina1.Text = (iPaginaInicial + 1).ToString();
                btnPagina1.CommandArgument = iPaginaInicial.ToString();
                if (iPosicion == 0)
                {
                    btnPagina1.ForeColor = System.Drawing.Color.White;
                    btnPagina1.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina1.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 2
            if (iPaginaInicial + 2 > iTotalPaginas)
            {
                btnPagina2.Visible = false;
            }
            else
            {
                btnPagina2.Visible = true;
                btnPagina2.Text = (iPaginaInicial + 2).ToString();
                btnPagina2.CommandArgument = (iPaginaInicial + 1).ToString();
                if (iPosicion == 1)
                {
                    btnPagina2.ForeColor = System.Drawing.Color.White;
                    btnPagina2.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina2.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina2.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 3
            if (iPaginaInicial + 3 > iTotalPaginas)
            {
                btnPagina3.Visible = false;
            }
            else
            {
                btnPagina3.Visible = true;
                btnPagina3.Text = (iPaginaInicial + 3).ToString();
                btnPagina3.CommandArgument = (iPaginaInicial + 2).ToString();
                if (iPosicion == 2)
                {
                    btnPagina3.ForeColor = System.Drawing.Color.White;
                    btnPagina3.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina3.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina3.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 4
            if (iPaginaInicial + 4 > iTotalPaginas)
            {
                btnPagina4.Visible = false;
            }
            else
            {
                btnPagina4.Visible = true;
                btnPagina4.Text = (iPaginaInicial + 4).ToString();
                btnPagina4.CommandArgument = (iPaginaInicial + 3).ToString();
                if (iPosicion == 3)
                {
                    btnPagina4.ForeColor = System.Drawing.Color.White;
                    btnPagina4.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina4.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina4.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 5
            if (iPaginaInicial + 5 > iTotalPaginas)
            {
                btnPagina5.Visible = false;
            }
            else
            {
                btnPagina5.Visible = true;
                btnPagina5.Text = (iPaginaInicial + 5).ToString();
                btnPagina5.CommandArgument = (iPaginaInicial + 4).ToString();
                if (iPosicion == 4)
                {
                    btnPagina5.ForeColor = System.Drawing.Color.White;
                    btnPagina5.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina5.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina5.BackColor = System.Drawing.Color.White;
                }
            }
        }

        protected void gvRequerimiento_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Select")
            {
                int indice = int.Parse(e.CommandArgument.ToString());
                List<EnRequerimiento> list = new List<EnRequerimiento>();
                list = (List<EnRequerimiento>)Session["ContenidoGrilla"];

                string Comando;
                EnlazarGridView();
                Comando = string.Format("VerMantenimiento('Mod','{0}');", ((GridView)sender).Rows[indice].Cells[1].Text);
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Modificar", Comando, true);
            }


        }

        private void InsertarDatos()
        {
            loEnRequerimiento = (List<EnRequerimiento>)Session["ContenidoGrilla"];
            string sNuevo = loEnRequerimiento[0].iNuevo.ToString();
            string Comando;
            EnlazarGridView();
            Comando = "VerMantenimientoNuevo('Ins','0','" + sNuevo + "');";
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Insertar", Comando, true);
        }

        protected void gvRequerimiento_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void gvRequerimiento_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int IdRequerimiento = int.Parse(gvRequerimiento.DataKeys[e.RowIndex].Value.ToString());
            List<EnRequerimiento> olista = new List<EnRequerimiento>();
            olista = (List<EnRequerimiento>)Session["ContenidoGrilla"];
            String EstadoReq = olista[e.RowIndex].sestadoRequerimiento;
            if ("Pendiente".Equals(EstadoReq))
            {
                lblMensajeError.Text = "El requerimiento esta en estado pendiente no se puede anular";
            }
            else
            {
                new RnRequerimiento().Eliminar(IdRequerimiento, 3);
            }
            loEnCliente = (EnCliente)Session["Usuario"];

            if (loEnCliente == null)
            {
                this.loEnCliente = new RnCliente().Leer(2);
            }

            int pidCliente = loEnCliente.idCliente;

            CargarGrillaDesdeBD(pidCliente);
            EnlazarGridView();                  
        }

        

    }
}
